package com.hxzy.exceptionhandler;

import com.hxzy.exception.BaseException;
import com.hxzy.pojo.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.sql.SQLIntegrityConstraintViolationException;

/**
 * @author wzm
 * @create 2023-10-14 9:31
 * project_name:stu_sys
 */
@Slf4j
@RestControllerAdvice //标识当前类是一个全局异常处理器类
public class GlobalExceptionHandler {

    //系统运行出错抛出的异常
    //要想处理异常 需要定义方法来具体执行
    /*@ExceptionHandler  //异常处理器具体处理哪个异常
    public Result ex01(Exception e){
        //打印异常的堆栈信息
        e.printStackTrace();
        if(e instanceof DuplicateKeyException) {
//            SQLIntegrityConstraintViolationException exception = (SQLIntegrityConstraintViolationException) e;
            log.info("异常信息，{}",e.getMessage());
            //获取具体的异常信息
            String message = e.getMessage();
            if(message.contains("Duplicate entry")){//有重复的关键字
                String[] split = message.split(" ");
                return Result.error("对不起,"+split[9]+"已经存在，请勿重复添加！");
            }else{
                return Result.error("未知SQL异常");
            }
        }
            //出现异常以后需要统一的返回一个异常的Result数据
            return Result.error("对不起,操作出现了异常，请联系管理员处理！！！");
    }*/


    //推荐重载的方法  匹配不同的异常执行不同的操作
    @ExceptionHandler  //异常处理器具体处理哪个异常
    public Result ex01(SQLIntegrityConstraintViolationException e){
        String message = e.getMessage();
        if (message.contains("Duplicate entry")){
            String[] s = message.split(" ");
            return Result.error("对不起,"+s[2]+"已经存在，请勿重复添加！");
        }else {
             return Result.error("未知SQL异常");
        }

    }

    @ExceptionHandler  //异常处理器具体处理哪个异常
    public Result ex01(Exception e){
        return Result.error("异常");
    }


    //在这里,根据公司的要求可能还会捕获自定异常进行处理  具体操作就是 定义一个异常父类 声明多个异常子类

    //处理业务自定义异常
    @ExceptionHandler
    public Result ex01(BaseException ex){
        log.info("异常信息，{}",ex.getMessage());

        return Result.error(ex.getMessage());
    }



}
